Είναι καθαρά θέμα του control που χρησιμοποιείς το αν μπορεί να δουλέψει με κάποια Stream κλάση ή απαιτεί κάποιο path ή URL. Αν μπορεί, δεν υπάρχει λόγος να κάνεις την αποκρυπτογράφηση στη μνήμη, μπορείς απλά να χρησιμοποιήσεις ένα CryptoStream πάνω από το FileStream που χρησιμοποιείς και να του το περάσεις απευθείας. Αν όμως χρησιμοποιείς κάποιο ActiveX control όπως το AxWindowsMediaPlayer λογικό είναι ότι δεν θα μπορέσεις να χρησιμοποιήσεις τα Streams του .ΝΕΤ.
Το περίεργο είναι ότι μόνο στο Silverlight μπορείς να περάσεις ένα δικό σου Stream με τη MediaElement.SetSource . Το MediaElement υπάρχει στο WPF και στο Silverlight και είναι ένα control το οποίο χρησιμοποιείται video ή audio rendering και δεν έχει τους περιορισμούς του MediaPlayer, γι αυτό και χρησιμοποιείται κατά κόρον στην δημιουργία custom media players. Δυστυχώς, ακόμα και στο WPF δεν μπορείς να δώσεις το δικό σου stream.
Μία ιδέα που διάβασα στο StackOverflow είναι να σηκώσεις ένα WCF service το οποίο θα ακούει σε κάποιο HTTP port για GET και θα επιστρέφει τo stream. Αντί για WCF μπορείς επίσης να χρησιμοποιήσεις την κλάση HttpListener για να κάνεις ουσιαστικά την ίδια δουλειά. Άλλη ιδέα από το ίδιο άρθρο (ομολογουμένως τραβηγμένη) είναι να φτιάξεις το κομμάτι του player σε Silverlight και να το δείξεις μέσα σε μία εφαρμογή WPF.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos